package com.speed.printer;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Label;
import java.awt.Toolkit;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.IOException;

import javax.swing.ImageIcon;

public class PrintBookUtil implements Printable {
	private static final double pw=226.77d,ph=283.46d;
	
	public static void main(String[] args) throws IOException {
		//g2d.dispose();//释放
		//-------------------------------------->
		Book book = new Book();	// 通俗理解就是书、文档
		PageFormat pf = new PageFormat();
		pf.setOrientation(PageFormat.PORTRAIT);// 设置成竖打
		// 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
		Paper p = new Paper();
		p.setSize(pw,ph);// 纸张大小
		p.setImageableArea(0, 0, pw,ph);// A4(595 X// 842)设置打印区域，其实0，0应该是72，72，因为A4纸的默认X,Y边距是72
		pf.setPaper(p);
		book.append(new PrintBookUtil(), pf);// 把 PageFormat 和 Printable 添加到书中，组成一个页面
		// 获取打印服务对象
		PrinterJob job = PrinterJob.getPrinterJob();
		// 设置打印类
		job.setPageable(book);
		try {
			// 可以用printDialog显示打印对话框，在用户确认后打印；也可以直接打印
			// boolean a=job.printDialog();
			// if(a)
			// {
			job.print();
			// }

		} catch (PrinterException e) {
			e.printStackTrace();
		}
		
	}

	@Override
	public int print(Graphics graphics, PageFormat pf, int pageIndex)throws PrinterException {
		Graphics2D g2 = (Graphics2D) graphics;// 转换成Graphics2D
		//g2.translate(pf.getImageableX(), pf.getImageableY());//转换坐标，确定打印边界
		g2.setColor(Color.black);// 设置打印颜色为黑色
		// 打印起点坐标
		System.out.println("x:"+pf.getImageableX());
		System.out.println("y:"+pf.getImageableY());
		double x = pf.getImageableX();
		double y = pf.getImageableY()+50;
		switch (pageIndex) {
		case 0:
			// 设置打印字体（字体名称、样式和点大小）（字体名称可以是物理或者逻辑名称）
			Font font = new Font("微软雅黑", Font.PLAIN, 14);// Java平台所定义的五种字体系列：Serif、SansSerif、Monospaced、Dialog 和 DialogInput
			g2.setFont(font);// 设置字体
			
			float heigth = font.getSize2D();// 字体高度
			System.out.println("x=" + x);
			// -1- 用Graphics2D直接输出
			// 首字符的基线(右下部)位于用户空间中的 (x, y) 位置处
			// g2.drawLine(10,10,200,300);
			
			//===================================================>标题
			float h3=(float) y + 1 * heigth;
			String tit="";
			g2.drawString(tit,(float)((pw-new Label().getFontMetrics(font).stringWidth(tit))/2), h3);
			//h3= h3*2;
			h3= h3*2+5;
			tit="";
			g2.drawString(tit,(float)((pw-new Label().getFontMetrics(font).stringWidth(tit))/2), h3);
			//===================================================>分割线
			//BasicStroke bs_3=new BasicStroke(1.0f);
			float[] dash1 = {0.001f};
			// 设置打印线的属性。
			// 1.线宽 2、3、不知道，4、空白的宽度，5、虚线的宽度，6、偏移量
			g2.setStroke(new BasicStroke(0f, BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 2.0f, dash1, 0.0f));
			//g2.setStroke(bs_3);//设置线宽
			g2.drawLine((int)x,(int)(y+2*heigth+19),(int)(x+pw),(int)(y+2*heigth+19));//(int)(y+2*heigth+10)2*heigth因为有2行字体高度
			
			//====================================================>公司
			h3=h3+10;
			font = new Font("微软雅黑", Font.BOLD, 20);
			g2.setFont(font);// 设置字体
			h3=h3+font.getSize2D()+10;// 字体高度
			String pCompany="东莞全诚信息科技";
			g2.drawString(pCompany,(float)((pw-new Label().getFontMetrics(font).stringWidth(pCompany))/2),h3);
			
			
			
			
			
			
			//====================================================>名字
			h3=h3+10;
			font = new Font("微软雅黑", Font.BOLD, 20);
			g2.setFont(font);// 设置字体
			h3=h3+font.getSize2D()+10;// 字体高度
			String pName="程畅";
			g2.drawString(pName,(float)((pw-new Label().getFontMetrics(font).stringWidth(pName))/2),h3);
			//=====================================================>座位
			String seatNo="签到码：868675";
			font = new Font("微软雅黑", Font.PLAIN, 18);
			g2.setFont(font);// 设置字体
			h3=h3+font.getSize2D()+10;// 字体高度
			g2.drawString(seatNo,(float)((pw-new Label().getFontMetrics(font).stringWidth(seatNo))/2),h3);
			//=====================================================>二维码
			//Image src = Toolkit.getDefaultToolkit().getImage("E:\\scancode.png");
			//ImageIcon ims=new ImageIcon(src);
			
			//g2.drawImage(src,((int)pw-src.getWidth(null)*2+17), (int) h3+17, ims.getImageObserver());//二维码80*80
			//g2.dispose();
			
			//h3=h3+font.getSize2D()+10*2;// 字体高度
			//g2.drawString("======你发的大幅度反对法速==",(pw-new Label().getFontMetrics(font).stringWidth(seatNo))/2,h3);
			
			/*Image src = Toolkit.getDefaultToolkit().getImage("e:\\tSSest.jpg");
			g2.drawImage(src, (int) x, (int) y, c);
			int img_Height = src.getHeight(c);
			int img_width = src.getWidth(c);
			System.out.println("img_Height="+img_Height+"img_width="+img_width) ;
			g2.drawString(str, (float) x, (float) y + 1 * heigth + img_Height);
			g2.drawString("暨制造业升级转型大课", (float) x, (float) y + 1 * heigth + img_Height);
			g2.drawLine((int) x, (int) (y + 1 * heigth + img_Height + 10),(int) x + 200, (int) (y + 1 * heigth + img_Height + 10));
			g2.drawImage(src, (int) x,(int) (y + 1 * heigth + img_Height + 11), c);*/
			return PAGE_EXISTS;
		default:
			return NO_SUCH_PAGE;
		}
	}
}